﻿using System;
using System.Data.SqlClient;
using System.Web.UI.WebControls;

public partial class Forma_3 : System.Web.UI.Page
{
    private String SessionID;
    private Boolean FolioExists;
    private Int32 Folio;

    private void Page_Load(object sender, System.EventArgs e)
    {
        SessionValidation();

        // Se verifíca si existe un Folio actual para cargar los datos
        // que han sido previamente guardados
        DatabaseConnection dbCon = new DatabaseConnection();
        FolioExists = dbCon.FolioExistsForCurrentUser(ref Folio, SessionID);
        FamiliaresDataSource.ConnectionString = dbCon.GetConnectionString();
        dbCon.CloseConnection();
        if (FolioExists && !Page.IsPostBack)
        {
            LoadFormWithPastData();
        }
    }


    // Métodos para el ListView de la lista de No. Personas en Casa-Habitación
    protected void ListView_PersonasCasaHab(object sender, ListViewCommandEventArgs e)
    {
        if (e.CommandName == "Insert")
        {
            TextBox txtParentesco = (TextBox)e.Item.FindControl("txtParentesco");
            TextBox txtEdad = (TextBox)e.Item.FindControl("txtEdad");
            TextBox txtEstadoCivil = (TextBox)e.Item.FindControl("txtEstadoCivil");
            String insertCommand = "INSERT INTO Familiares (Folio, Familiares_Parentesco, Familiares_Edad, Familiares_EstadoCivil) " + 
                                   "VALUES (" + Folio + ", '" + txtParentesco.Text + "' , " + txtEdad.Text + ", '" + txtEstadoCivil.Text + "');";
            FamiliaresDataSource.InsertCommand = insertCommand;
            
        }
        else if (e.CommandName == "Update")
        {
            TextBox IdFamiliares = (TextBox)e.Item.FindControl("txtUpIdFamiliares");
            TextBox txtUpParentesco = (TextBox)e.Item.FindControl("txtUpParentesco");
            TextBox txtUpEdad = (TextBox)e.Item.FindControl("txtUpEdad");
            TextBox txtUpEstadoCivil = (TextBox)e.Item.FindControl("txtUpEstadoCivil");
            String updateCommand = "UPDATE Familiares SET Familiares_Parentesco = '" + txtUpParentesco.Text + "', " + 
                                   "Familiares_Edad = " + txtUpEdad.Text + ", Familiares_EstadoCivil = '" + txtUpEstadoCivil.Text + "' " +
                                   "WHERE IdFamiliares = " + IdFamiliares.Text + " " +
                                   "AND Folio = " + Folio;
            FamiliaresDataSource.UpdateCommand = updateCommand;
        }
        else if (e.CommandName == "Delete")
        {
            TextBox IdFamiliares = (TextBox)e.Item.FindControl("txtUpIdFamiliares");
            String deleteCommand = "DELETE FROM Familiares WHERE IdFamiliares = " + Convert.ToInt32(IdFamiliares.Text);
            FamiliaresDataSource.DeleteCommand = deleteCommand;
        }
    }

    protected void SqlDataSource1_Selecting(object sender, SqlDataSourceSelectingEventArgs e)
    {
        e.Command.CommandText = "SELECT * FROM [Familiares] WHERE Folio = '" + Folio + "';";
    }


    // Obtiene el valor para Datos_DependenciaEconomica
    private String GetDatos_DependenciaEconomica()
    {
        if (Datos_DependenciaEconomica.SelectedIndex != 3)
            return Datos_DependenciaEconomica.SelectedValue;
        return Datos_DependenciaEconomica.SelectedIndex == 3 ? DependenciaEconomica_OtraText.Text : String.Empty;
    }


    // Carga la información previamente guardada en la solicitud
    private void LoadFormWithPastData()
    {
        DatabaseConnection dbCon = new DatabaseConnection();
        String query = "SELECT *" +
            " FROM Solicitud " +
            " WHERE Solicitud.Folio =  " + Folio +
            " ORDER BY Solicitud.Folio desc";
        SqlDataReader formData = dbCon.ExecuteSelect(query);

        if (formData.Read())
        {
            String switchString = formData["Datos_EstadoCivilPadres"].ToString();
            switch (switchString)
            {
                case "Casados":
                    Datos_EstadoCivilPadres.SelectedIndex = 1;
                    break;
                case "Divorciados":
                    Datos_EstadoCivilPadres.SelectedIndex = 2;
                    break;
                case "Separados":
                    Datos_EstadoCivilPadres.SelectedIndex = 3;
                    break;
                case "Viudo(a)":
                    Datos_EstadoCivilPadres.SelectedIndex = 4;
                    break;
                case "Unión libre":
                    Datos_EstadoCivilPadres.SelectedIndex = 5;
                    break;
                case "Solteros":
                    Datos_EstadoCivilPadres.SelectedIndex = 6;
                    break;
                default:
                    Datos_EstadoCivilPadres.SelectedIndex = 0;
                    break;
            }

            switchString = formData["Datos_DependenciaEconomica"].ToString();
            switch (switchString)
            {
                case "": break;
                case "Padre":
                    Datos_DependenciaEconomica.SelectedIndex = 0;
                    break;
                case "Madre":
                    Datos_DependenciaEconomica.SelectedIndex = 1;
                    break;
                case "Ambos":
                    Datos_DependenciaEconomica.SelectedIndex = 2;
                    break;
                default:
                    Datos_DependenciaEconomica.SelectedIndex = 3;
                    DependenciaEconomica_OtraText.Text = switchString;
                    break;
            }
            Datos_NombreTutor.Text = formData["Datos_NombreTutor"].ToString();
        }
        dbCon.CloseConnection();
    }


    // Inserta / Actualiza la información de la forma
    protected void InsertData(object sender, EventArgs e)
    {
        DatabaseConnection dbCon = new DatabaseConnection();
        String myCommand;
        if (FolioExists)
        {
            //Update query goes here
            myCommand = "UPDATE \"Solicitud\" " +
                      "SET Solicitud_Fecha = '" + DateTime.Today.Year + "-" + DateTime.Today.Month + "-" + DateTime.Today.Day + "', " +
                      "Datos_EstadoCivilPadres = '" + Datos_EstadoCivilPadres.SelectedValue + "', " +
                      "Datos_DependenciaEconomica = '" + GetDatos_DependenciaEconomica() + "', " +
                      "Datos_NombreTutor = '" + Datos_NombreTutor.Text + "' " +
                      "WHERE Solicitud.Folio = " + Folio.ToString() + " " +
                      "AND Solicitud.Matricula = '" + SessionID + "'";
        }
        else //No folio exists so INSERT query goes here
        {
            myCommand = "INSERT \"Solicitud\" (Solicitud_Fecha, Datos_EstadoCivilPadres, Datos_DependenciaEconomica, Datos_NombreTutor)" +
                        "VALUES (" + DateTime.Today.Year + "-" + DateTime.Today.Month + "-" + DateTime.Today.Day + "', '" +
                        Datos_EstadoCivilPadres.SelectedValue + "', '" +
                        GetDatos_DependenciaEconomica() + "', '" +
                        Datos_NombreTutor.Text + "', '" +
                        SessionID + "')";
        }
        int rowsAffected = dbCon.ExecuteNonQuery(myCommand);
        dbCon.CloseConnection();

        Response.Redirect("~/Forma/Forma4.aspx");
    }


    /* Valida que la sesión del usuario sea la correcta para mostrar
    * el contenido de esta página
    */
    protected void SessionValidation()
    {
        SessionID = (String)Session["SessionID"];
        String UserType = (String)Session["UserType"];

        if (String.IsNullOrEmpty(SessionID) || String.IsNullOrEmpty(UserType))
        {
            Session.RemoveAll();
            Response.Redirect("~/Default.aspx");
        }
        else
        {
            if (!String.Equals(UserType, "Alumnos"))
            {
                Session.RemoveAll();
                Response.Redirect("~/Default.aspx");
            }
        }
    }
}